第一章
程序 = ?
数据结构+算法
算法的四个特性?
输入、输出、有穷、确定
好的算法?
正确性、可读性、健壮性、高效率和低存储量需求
算法复杂度排序?
复杂度按数量级递增排列依次为:常数阶O(1)、对数阶O(logn)、线性阶O(n)、线性对数阶O(nlogn)、平方阶O($n^{2}$)、立方阶O($n^{3}$)、…、k次方阶O($n^{k}$)、指数阶O($2^{n}$)、阶乘阶($n!$)。
算法复杂度分析中的四个符号是?分别代表什么?
Ω | O | θ | o |
---|---|---|---|
≥ 渐渐下界 | ≤ 渐进上界 | = | < |
练习题
设n是描述问题规模的非负整数,下面程序片段的时间复杂度是?
1 | x=2; |
A. B.O(n)
C. D.
设n是描述问题规模的非负整数,下面程序片段的时间复杂度是?
1 | x=2; |
答:
解析: 在程序中, 执行频率最高的语句为”x = 2*x “。设该语句共执行了T (n)次,则, 故
设n是描述问题规模的非负整数,下面程序片段的时间复杂度是?
1 | x=2; |
A. B.
C. D.
设n是描述问题规模的非负整数,下面程序片段的时间复杂度是( )。
1 | void fun(int n){ |
A.O($n^{2}\log{2}n$)
B.O($n\log{5}n$)
C.O($n^{2}\log_{5}n$)
D.O($n^{3} $)
答案:C。解析:基本运算语句是k=5*k,设其执行时间为T(n)。 对于j每循环一次,该语句的执行次数为m,有:$5^{m}$ ≤n,即m≤$\log_{5}n$。所以:
算法思考题:
一本书的页码从自然数1开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。例如第6页用6表示而不是06或006。数字统计问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1,2,…,9。
思考:算法复杂度描述中为什么用“logn”,而不用“$\log_{2}n$”、“lnn”或“lgn”?
已知数组a[n]中,有且仅有两个元素值相等,其他元素各不相等。请找出相同的元素值?
对数组a[n]中值相等的元素,仅保留一个、其余去除,并紧凑排列?
去除有序数组a[n]中的重复元素。比如:1,1,2,2,2,3,3,3,4,5,6,6 → 1,2,3,4,5,6?
1 | // 方法一 |
1 | // 方法二 |
1 | // 方法三 |